package socketmvc.core.packets.biz;

import socketmvc.core.util.JsonKit;
import socketmvc.core.packets.basic.IPacket;

public interface IMessage<C> {

    /**
     * 获取消息唯一id
     * @return id
     */
    String getId() ;

    /**
     * 获取消息类型
     * @return 类型
     */
    Integer getType();

    /**
     * 获取消息创建时间
     * @return 时间戳
     */
    Long getCreateAt();

    /**
     * 获取消息内容
     * @return 消息内容
     */
    C getContent();


    /**
     * 转换成packet
     * @param cmd 命令码
     * @return packet
     */
    IPacket toPacket(String cmd);

    /**
     * 转换成json spring
     * @return json spring
     */
    default String toJsonStr(){
        return JsonKit.toJSONString(this);
    }

    /**
     * 转换成json bytes
     * @return json bytes
     */
    default byte[] toBytes(){
        return JsonKit.toJsonBytes(this);
    }


//    abstract class Builder<T extends IMessage<?> , B extends IMessage.Builder<T,B>>{
//
//        /**
//         * 消息id，全局唯一
//         */
//        protected String id ;
//        /**
//         * 消息类型;
//         */
//        protected Integer type ;
//        /**
//         * 消息创建时间
//         */
//        protected Long createTime;
//
//        /**
//         * 消息内容
//         */
//        protected Object content;
//
//
//        private final B builder = this.getThis();
//
//        /**
//         * 供子类获取自身builder抽象类;
//         */
//        protected abstract B getThis();
//
//        public B createTime(Long createTime) {
//            this.createTime = createTime;
//            return builder;
//        }
//        public B id(String id) {
//            this.id = id;
//            return builder;
//        }
//        public B type(Integer type) {
//            this.type = type;
//            return builder;
//        }
//
//        public B content(Object content) {
//            this.content = content;
//            return builder;
//        }
//        /**
//         * 供子类实现的抽象构建对象
//         */
//        public abstract T build();
//    }
}
